home *** CD-ROM | disk | FTP | other *** search
/ Future Workshop / Future Workshop.iso / multimed / qtw111 / samples / dispatch.asm < prev    next >
Assembly Source File  |  1993-03-24  |  2KB  |  62 lines

  1.  
  2. ; ---------------------------------------------------------------------
  3. ;
  4. ; DISPATCH.ASM - QuickTime for Windows Sample Decompressor
  5. ;
  6. ;                Version 1.1
  7. ;
  8. ;                (c) 1988-1993 Apple Computer, Inc. All Rights Reserved.
  9. ;
  10. ; ---------------------------------------------------------------------
  11.  
  12.  
  13. INCLUDE  QTMACROS.INC
  14.  
  15. ComponentFunc MACRO Sel:req, Name:req
  16. codec&Name EQU   Sel              ;; define selector
  17.          ENDM
  18. INCLUDE  CDFUNCS.INC
  19.  
  20. DGROUP   GROUP   _DATA
  21. _DATA    SEGMENT PARA PUBLIC 'DATA'
  22. _DATA    ENDS
  23.  
  24. CODESEG  SEGMENT PARA USE16 PUBLIC 'CODE'
  25.          OPTION LANGUAGE:C
  26.         .386
  27.          ASSUME  DS:DGROUP
  28. INCLUDE  SCSTABLE.INC             ; Must be in code segment
  29.  
  30.          EXTERN  C cfBandDecompress:NEAR
  31.          EXTERN  C cfGetCodecInfo:NEAR
  32.          EXTERN  C cfPreDecompress:NEAR
  33.          EXTERN  C cfSequenceBusy:NEAR
  34.  
  35. CodecEntry PROC  FAR
  36.          TEST  BX, BX             ; Is selector negative?
  37.          JL    NegativeSelector   ; Skip if selector is negative
  38.          MOV   AX, DGROUP         ; Set DS for this DLL
  39.          MOV   DS, AX
  40.          CMP   BX, codecPreDecompress  ; Test for implemented functions
  41.          JE    cfPreDecompress    ; Dispatch if it matches
  42.          CMP   BX, codecBandDecompress
  43.          JE    cfBandDecompress
  44.          CMP   BX, codecGetCodecInfo
  45.          JE    cfGetCodecInfo
  46.          CMP   BX, codecCDSequenceBusy
  47.          JE    cfSequenceBusy
  48.                                   ; Bad selector
  49.          MOV   DX, 8000h          ; Load special error return
  50.          MOV   AX, 8002h          ; badComponentSelector
  51.          RET
  52. NegativeSelector:
  53.          NEG   BX                 ; Make positive
  54.          DEC   BX                 ; One relative to zero relative
  55.          ADD   BX, BX             ; WORD offset to byte offset
  56.          MOV   AX, DGROUP         ; Set DS for this DLL
  57.          MOV   DS, AX
  58.          JMP   WORD PTR cs:SelectorTable [BX]    ; Jump into selector function
  59. CodecEntry ENDP
  60. CODESEG  ENDS
  61.          END
  62.